<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>05_Function扩展</title>
</head>
<body>
<!--
1. Function.prototype.bind(obj) :
  * 作用: 将函数内的this绑定为obj, 并将函数返回
2. 面试题: 区别bind()与call()和apply()?
  * 都能指定函数中的this
  * call()/apply()是立即调用函数
  * bind()是将函数返回
-->
<script type="text/javascript">
  var obj={
      username:'kobi'
  }
  function foo(data) {
      console.log(this,data)
      console.log(data)
      console.log(this.username)
  }
  //不处理 指向window
  foo(33);
  console.log('call apply:====>')
   // 传入参数的形式
  foo.call(obj,33); //直接从第二个参数开始，依次往后传入
  foo.apply(obj,[33]); //第二个参数必须是数组，传入放在数组里
  console.log('bind:====>')
  // bind的特点 绑定完this 不会立即调用当前函数，而是将函数返回。
  var bar=foo.bind(obj);
  console.log(bar)
  // bind的传参方式：同call一样
  bar(34)
  // bind 和call apply的区别： bind不会立即调用
  //  使用场景bind  在回调函数中如果想改变this
  console.log('bind使用场景:====>')
  setTimeout(function () {
      console.log(this)
  }.bind(obj),1000)
</script>
</body>
</html>